package com.ys.datatype;

/**
 * 向上转型：父类引用指向子类对象，属于自动类型转换。
 * 格式：父类类型 变量名 =  子类对象;
 * 向下转型：子类引用指向父类对象，属于强制类型转换。
 * 格式：子类类型 变量名 =  (子类类型) 父类对象;
 * <p>
 * 描述: 类型转换:
 * 向上转型：
 * 优点：隐藏了子类类型，提高了代码的扩展性，多态本身就是向上转型的过程。
 * 缺点：只能使用父类共性的内容，不能调用子类特有方法！
 * 向下转型：
 * 优点：向下转型之后，可以调用子类特有方法
 * 缺点：但是向下转型有风险，容易发生ClassCastException异常！
 *
 * @author CodeYang
 * @version 2020/12/16 17:42
 */


public class DataType {

    public static void main(String[] args) {
        /*基本数据类型转换*/
        // 整数（int）转换成小数（double）
        int x = 10;
        double y = x;
        // 小数（double）转换成整数（int）
        double n = 2.2;
        int m = (int) n;
        /*引用数据类型抓换
         *   向上转型：父类引用指向子类对象，属于自动类型转换。
         * 	格式：父类类型 变量名 =  子类对象;
         * 向下转型：子类引用指向父类对象，属于强制类型转换。
         * 	格式：子类类型 变量名 =  (子类类型) 父类对象;
         * */
        // 1: 向上转型  自动  --多态 向上转型：
        // 向上转型 只可以用使用 父类与子类共有的成员变量 与成员方法
        Tom tom = new AtoTom();
        //tom.name = "01"; //---> 编译通过
        //tom.a_name;//----> 编译失败  不可以使用 AtoTom的成员变量
        tom.show(); //---> 编译通过 ,但是会执行 AtoTom 这个对象的 show()
        //tom.Aname();//----> 编译失败  不可以使用 AtoTom的成员方法
        // 2:向下转型  手动  可以使用共有父类的成员变量与成员方法 还可以使用子类特有的成员方法
        // 结论：如果某个对象可以执行“向下转型”，那么该对象以前肯定发生过“向上转型”。
        Tom obj2 = new BtoTom();
        BtoTom obj3 = (BtoTom) obj2;
        obj3.show();
        obj3.B_name ="03";
        obj3.Bname();



    }
}
